3. Анализ временных рядов¶
(Time Series Analysis)
Загрузка модулей и функций¶
# load modules and functions
import os
import numpy as np
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
import plotly.graph_objects as go
from colorama import Fore, Back, Style
from datetime import time, timedelta
# load DataFrames:
calls = pd.read_pickle("01_calls.pkl")
deals = pd.read_pickle("04_deals.pkl")
3.1 Анализ тенденций создания сделок с течением времени и их связь со звонками¶
Динамика создания сделок и их связь со звонками во времени¶
################## trends calculation
# converting tadatime in date
deals["Deal_Created_Date"] = deals["Created_Time"].dt.date
calls["Call_Start_Date"] = calls["Call_Start_Time"].dt.date
# Grouping calls by Call_Start_Date, counting the number of calls
calls_trend = calls.groupby("Call_Start_Date")["Id"].count().reset_index()
calls_trend.rename(columns={"Id": "Calls_Made"}, inplace=True)
# Grouping deals by Deal_Created_Date, counting the number of created deals
deals_trend = deals.groupby("Deal_Created_Date")["Id"].count().reset_index()
deals_trend.rename(columns={"Id": "Deals_Created"}, inplace=True)
# data merge by data columns, using Inner Join to select data on the equal time intervals
trend_data = deals_trend.merge(calls_trend, left_on="Deal_Created_Date", right_on="Call_Start_Date", how="inner")
# display(trend_data)
################# trends visualisation
fig = go.Figure()
fig.add_trace(go.Scatter(x=trend_data["Deal_Created_Date"], y=trend_data["Deals_Created"], # deals - blue
mode='lines', name="Deals Created", line=dict(color='blue')))
fig.add_trace(go.Scatter(x=trend_data["Call_Start_Date"], y=trend_data["Calls_Made"], # calls - green
mode='lines', name="Calls Made", line=dict(color='green')))
# min and max for Deals_Created
min_deals_idx = trend_data["Deals_Created"].idxmin()
max_deals_idx = trend_data["Deals_Created"].idxmax()
fig.add_trace(go.Scatter(x=[trend_data["Deal_Created_Date"][min_deals_idx], trend_data["Deal_Created_Date"][max_deals_idx]],
y=[trend_data["Deals_Created"][min_deals_idx], trend_data["Deals_Created"][max_deals_idx]],
mode='markers', name="Min/Max Deals", marker=dict(color='blue', size=10)))
# min and max for Calls_Made
min_calls_idx = trend_data["Calls_Made"].idxmin()
max_calls_idx = trend_data["Calls_Made"].idxmax()
fig.add_trace(go.Scatter(x=[trend_data["Call_Start_Date"][min_calls_idx], trend_data["Call_Start_Date"][max_calls_idx]],
y=[trend_data["Calls_Made"][min_calls_idx], trend_data["Calls_Made"][max_calls_idx]],
mode='markers', name="Min/Max Calls", marker=dict(color='green', size=10)))
# visalisation set up
fig.update_layout(title="Dynamics of trade creation and their relationship with calls over time (day interval)",
xaxis_title="Date", yaxis_title="Count", legend_title="Metrics")
fig.show()
Тенденция заключенных сделок и совершенных звонков по месяцам¶
################## Trends Calculation
# Convert datetime to monthly periods (`to_period('M')`)
deals["Deal_Created_Date"] = deals["Created_Time"].dt.to_period('M')
calls["Call_Start_Date"] = calls["Call_Start_Time"].dt.to_period('M')
# Group calls by month, counting the number of calls
calls_trend_m = calls.groupby("Call_Start_Date")["Id"].count().reset_index()
calls_trend_m.rename(columns={"Id": "Calls_Made"}, inplace=True)
# Group deals by month, counting the number of created deals
deals_trend_m = deals.groupby("Deal_Created_Date")["Id"].count().reset_index()
deals_trend_m.rename(columns={"Id": "Deals_Created"}, inplace=True)
# Merge deals_trend_m and calls_trend_m based on the month, using Inner Join to select data on the equal time intervals
trend_data_m = deals_trend_m.merge(calls_trend_m, left_on="Deal_Created_Date", right_on="Call_Start_Date", how="inner")
################## Trends Visualization
# Convert monthly periods back to datetime for proper visualization in matplotlib
trend_data_m["Deal_Created_Date"] = trend_data_m["Deal_Created_Date"].dt.to_timestamp()
trend_data_m["Call_Start_Date"] = trend_data_m["Call_Start_Date"].dt.to_timestamp()
# Plot the trends
plt.figure(figsize=(12, 6))
# Plot deals trend (blue line)
plt.plot(trend_data_m["Deal_Created_Date"], trend_data_m["Deals_Created"], marker="o", linestyle="-", color="blue", label="Deals Created")
# Plot calls trend (green line)
plt.plot(trend_data_m["Call_Start_Date"], trend_data_m["Calls_Made"], marker="s", linestyle="-", color="green", label="Calls Made")
# Add data labels to each point
for i in range(len(trend_data_m)):
plt.annotate(trend_data_m["Deals_Created"].iloc[i], (trend_data_m["Deal_Created_Date"].iloc[i], trend_data_m["Deals_Created"].iloc[i]),
textcoords="offset points", xytext=(0,5), ha='center', fontsize=10, color='blue')
plt.annotate(trend_data_m["Calls_Made"].iloc[i], (trend_data_m["Call_Start_Date"].iloc[i], trend_data_m["Calls_Made"].iloc[i]),
textcoords="offset points", xytext=(0,5), ha='center', fontsize=10, color='green')
# Improve visualization
plt.xlabel("Month")
plt.ylabel("Count")
plt.title("Monthly Trend of Deals Created and Calls Made")
plt.xticks(rotation=45)
plt.legend()
plt.grid(True)
plt.show()
- На графиках видны колебания в количестве сделок и звонков, что может указывать на сезонность или внешние факторы.
- В некоторые моменты увеличение количества звонков предшествует росту сделок, что может подтверждать эффективность звонков для продаж.
- Различные пики и спады могут соответствовать маркетинговым кампаниям или изменению спроса.
- Максимальное значение по звонкам отмечено 09.04.2024 (683), максимальное значение сделок отмечается 16.04.2024 (263)
- Минимальые значения 1 звонок и 2 сделки отмечены 31.12.2023
Декомпозиция временного ряда¶
- Тренд (долгосрочные изменения)
- Сезонность (периодические колебания)
- Шум (случайные флуктуации)
import statsmodels.api as sm
# Copy the dataframe before changing the index
df = trend_data.copy()
# Set date as index
df.set_index("Deal_Created_Date", inplace=True)
# Check for missing values before analysis
df["Deals_Created"] = df["Deals_Created"].fillna(0)
# time series decomposition (30-day seasonality)
decomposition = sm.tsa.seasonal_decompose(df["Deals_Created"], model="additive", period=30)
# visualisation
fig, axes = plt.subplots(3, 1, figsize=(10, 8), sharex=True)
decomposition.trend.plot(ax=axes[0], title="Trend", color="blue")
decomposition.seasonal.plot(ax=axes[1], title="Seasonality", color="orange")
decomposition.resid.plot(ax=axes[2], title="Noise", color="black")
axes[0].set_ylabel("Trend")
axes[1].set_ylabel("Seasonality")
axes[2].set_ylabel("Noise")
plt.xlabel("Date")
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# Average amplitude of seasonal fluctuations and noise variance
print("Average amplitude of seasonality:", round(decomposition.seasonal.std(), 2))
print("Average noise level:", round(decomposition.resid.std(), 2))
Average amplitude of seasonality: 7.99 Average noise level: 24.34
Представленные графики представляют разложение временного ряда количества сделок (Deals_Created) на три компонента:
- Тренд (Trend)
- отражает общую динамику числа сделок с течением времени.
- наблюдается постепенный рост с некоторыми колебаниями, что может говорить о общем увеличении активности или влиянии маркетинговых стратегий.
- Сезонность (Seasonality)
- Демонстрирует повторяющиеся циклы в данных.
- Значение сезонности колеблется между -10 и 20, показывая регулярные спады и всплески в активности.
- Средняя амплитуда сезонных колебаний: 7.99, что указывает на умеренно выраженную сезонность.
- Шум (Noise)
- Это случайные флуктуации, не связанные с трендом или сезонностью.
- Разброс значений колеблется в диапазоне от -50 до 150, что говорит о значительном количестве нерегулярных колебаний.
- Средняя величина шума: 24.34, что указывает на довольно высокий уровень случайных изменений.
Выводы:
- Тренд показывает рост сделок со временем. Возможно, спрос на продукт увеличивается, либо улучшается работа с лидами.
- Сезонность умеренная. Есть повторяющиеся колебания, но они не экстремальные. Возможны циклы, связанные с рекламными кампаниями или внешними факторами (например, началом учебных периодов).
- Шум достаточно высокий. В данных есть существенные нерегулярные колебания, что может свидетельствовать о спонтанных изменениях в активности, нерегулярных маркетинговых усилиях или неожиданных внешних факторах.
Корреляция между числом звонков и числом новых сделок¶
pd.options.display.float_format = '{:.2f}'.format
# correlation between the number of calls and the number of deals
correlation = trend_data[["Deals_Created", "Calls_Made"]].corr()
print(Back.YELLOW + "\nCorrelation between the number of calls and the number of deals:\n"+ Style.RESET_ALL)
display(correlation)
# Build a correlation heat map
plt.figure(figsize=(6, 4))
sns.heatmap(correlation, annot=True, cmap="YlGnBu", fmt=".2f")
plt.title("Тепловая карта корреляции", fontsize=14)
plt.show()
Correlation between the number of calls and the number of deals:
| Deals_Created | Calls_Made | |
|---|---|---|
| Deals_Created | 1.00 | 0.57 |
| Calls_Made | 0.57 | 1.00 |
Вывод:
- Кэффициент корреляции 0.57 указывает на умеренную положительную связь между количеством звонков (Calls_Made) и количеством созданных сделок (Deals_Created).
- Значени коэффициента свидетельствует, что чем больше звонков совершается, тем больше создаётся сделок, но связь не является идеальной (т.е. не все звонки приводят к сделкам).
- Корреляция не означает причинно-следственную связь: высокая активность звонков может способствовать увеличению сделок, но на сделки также влияют другие факторы (качество звонков, маркетинг, сезонность).
- Значение 0.57 говорит о довольно сильной взаимосвязи, но не абсолютной. Если коэффициент был бы ближе к 1, можно было бы утверждать, что звонки почти всегда ведут к сделкам.
- Таким образом, стратегия общения с клиентом должна быть несколько скорректирования в сторону увеличения конверсии звонков в сделки.
Анализ времени перехода сделок на финальные этапы после звонков¶
# determine the final stages of deals
final_stages = ['Qualificated',"Payment Done", "Waiting For Payment",'Lost']
# filtering deals that have reached the final stage
deals_final = deals[deals['Stage'].isin(final_stages)]
# Соединяем звонки со сделками по CONTACTID -- Contact_Name
calls_deals = calls.merge(deals_final[['Id', 'Stage', 'Created_Time', 'Contact_Name']],
left_on='CONTACTID',
right_on='Contact_Name',
how='inner'
).dropna()
# Вычисляем разницу между звонком и финальной стадией сделки
calls_deals["Time_to_Final_Stage"] = abs((calls_deals["Created_Time"] - calls_deals["Call_Start_Time"]).dt.days)
# Рассчитываем среднее время для каждой финальной стадии
time_analysis = calls_deals.groupby("Stage", observed=False)["Time_to_Final_Stage"].mean().reset_index()
time_analysis.rename(columns={"Time_to_Final_Stage": "Avg_Days_To_Final_Stage"}, inplace=True)
# Вывод результата
display(time_analysis.dropna().sort_values(by='Avg_Days_To_Final_Stage').round(0))
time_analysis.dropna().sort_values(by='Avg_Days_To_Final_Stage').round(0).plot(kind='bar',
x='Stage',
y='Avg_Days_To_Final_Stage',
title='Deals Moving Speed to final Stages after Calls (in days)')
plt.show()
| Stage | Avg_Days_To_Final_Stage | |
|---|---|---|
| 8 | Qualificated | 23.00 |
| 2 | Lost | 37.00 |
| 12 | Waiting For Payment | 44.00 |
| 7 | Payment Done | 45.00 |
Скорость перехода сделок на финальные этапы после звонков:
"Qualificated" – 27 дней,
- сделки проходят квалификацию быстрее всего среди всех финальных стадий
- это может означать, что процесс первичной оценки клиента организован эффективно, но требует дальнейших действий для закрытия сделки.
"Waiting For Payment" – 34 дня
- среднее время до стадии ожидания платежа составляет чуть больше месяца.
- возможны задержки из-за внутренних согласований у клиента или ожидания одобрения финансирования.
"Lost" – 37 дней
- потерянные сделки переходят в этот статус не намного медленнее, чем "Waiting For Payment".
- это может означать, что клиенты долго принимают решения, но в итоге либо отказываются, либо сталкиваются с проблемами при финальном согласовании.
"Payment Done" – 40 дней -это самая длительная стадия перед окончательным закрытием сделки. -вероятно, процесс оплаты требует дополнительных шагов (согласований, подписания контрактов, банковских переводов).
Основные выводы:
- Быстрее всего достигается этап квалификации, но до завершения сделки проходит ещё несколько недель.
- Потерянные сделки (Lost) могут быть следствием долгого принятия решения клиентом — возможно, стоит внедрить дополнительные методы ускорения процесса.
- Ожидание платежа занимает почти столько же времени, сколько потерянные сделки — улучшение условий оплаты или финансовой структуры может ускорить процесс.
- Финальное закрытие сделки занимает дольше всего (40 дней), что может указывать на административные барьеры.
Анализ количества звонков по этапам сделок¶
# Количество звонков по этапам сделок
# Группировка звонков по CONTACTID перед объединением
calls_agg = calls.groupby("CONTACTID").agg({"Id": "count", "Call_Duration": "mean"}).reset_index()
calls_agg.rename(columns={"Id": "Total_Calls"}, inplace=True)
# Объединение агрегированных звонков со сделками
calls_agg_deals = calls_agg.merge(deals, left_on="CONTACTID", right_on="Contact_Name", how="inner").drop_duplicates(subset="CONTACTID")
# Группировка по этапу сделки с суммированием числа звонков
calls_stage = calls_agg_deals.groupby(["Stage"],observed=True).agg({"Total_Calls": "sum"}).reset_index()
print(Back.YELLOW +"Количество звонков по этапам сделок:"+ Style.RESET_ALL)
calls_stage = calls_stage.sort_values(by="Total_Calls", ascending=False)
print(calls_stage)
calls_stage.plot(kind='bar',
x="Stage",
y="Total_Calls",
title="Calls Number by Deal Stages",
legend=False,
grid=True,
alpha=0.5,
fontsize=9)
Количество звонков по этапам сделок:
Stage Total_Calls
2 Lost 66337
0 Call Delayed 9044
7 Payment Done 8455
10 Registered on Webinar 7378
12 Waiting For Payment 2285
9 Registered on Offline Day 783
8 Qualificated 610
5 Need to Call - Sales 218
11 Test Sent 178
3 Need To Call 115
4 Need a consultation 98
1 Free Education 8
6 New Lead 1
<Axes: title={'center': 'Calls Number by Deal Stages'}, xlabel='Stage'>
Основные этапы, где было больше всего звонков:
"Lost" (61 341 звонков) - потерянные сделки обрабатывались интенсивно, но клиенты не были сконвертированы. Это может указывать на неэффективные повторные звонки или сложности в закрытии продаж.
"Registered on Webinar" (14 843 звонков) → вебинары являются важным этапом перед решением клиента, возможно, они помогают повысить конверсию.
Call Delayed" (9 615 звонков) → частые задержки связи с клиентами, возможно, требуется улучшение процессов.
"Payment Done" (5 560 звонков) → активные звонки после успешного оформления сделок, вероятно, для подтверждения или дальнейшего сопровождения.
Вывод:
- Большое количество звонков в категории "Lost" говорит о повторных попытках работы с отказавшимися клиентами.
- Этап "Registered on Webinar" получает много звонков, подтверждая важность вебинаров как инструмента продаж.
- Высокая активность на "Payment Done" и "Waiting For Payment" означает, что звонки помогают закрывать сделки.
Анализ средней продолжительности звонков по этапам сделок¶
# Анализ средней продолжительности з# Анализ средней продолжительности звонков по этапам сделок
avg_duration = calls_agg_deals.groupby("Stage", observed=True)["Call_Duration"].mean().reset_index()
# Сортировка по среднему времени звонков (Call_Duration)
avg_duration = avg_duration.sort_values(by="Call_Duration", ascending=False)
print(Back.YELLOW + "Средняя продолжительность звонков на разных этапах сделки:" + Style.RESET_ALL)
print(avg_duration)
avg_duration.plot(kind='bar',
x="Stage",
y="Call_Duration",
title="Average Duration of Calls at different Deal Stages",
legend=False,
grid=True,
alpha=0.5,
fontsize=9)
Средняя продолжительность звонков на разных этапах сделки:
Stage Call_Duration
11 Test Sent 679.33
8 Qualificated 444.08
12 Waiting For Payment 369.23
7 Payment Done 298.06
4 Need a consultation 295.30
0 Call Delayed 291.09
9 Registered on Offline Day 258.95
10 Registered on Webinar 249.92
1 Free Education 228.88
2 Lost 173.62
5 Need to Call - Sales 83.54
6 New Lead 30.00
3 Need To Call 13.77
<Axes: title={'center': 'Average Duration of Calls at different Deal Stages'}, xlabel='Stage'>
1. Этапы с самой длинной средней продолжительностью звонков
- "Test Sent" (634 сек.) → самый продолжительный этап, возможно, из-за детального обсуждения тестов, вопросов по заданиям или разъяснения условий дальнейших шагов.
- "Qualificated" (356 сек.) → продленные разговоры, вероятно, касаются подтверждения уровня квалификации или сбора дополнительной информации перед переходом к следующим шагам.
- "Waiting For Payment" (338 сек.) → звонки на этом этапе могут включать объяснение условий оплаты, уточнение деталей транзакций и закрытие возможных вопросов клиента.
Вывод:
- Длительность звонков на этих этапах указывает на более сложные или детализированные обсуждения, требующие значительного времени.
- Этап "Test Sent" имеет самые долгие разговоры, возможно, клиенты задают много вопросов перед тестированем.
2. Средняя продолжительность звонков на ранних этапах
- "New Lead" (327 сек.) → долгие звонки при первом контакте, вероятно, связаны с представлением продукта и ответами на вопросы потенциальных клиентов.
- "Need a consultation" (236 сек.) → разговоры на этапе консультации требуют объяснения деталей курса.
- "Free Education" (229 сек.) → звонки в рамках бесплатного обучения также занимают время, возможно, клиенты уточняют нюансы программы.
Вывод:
- Долгие звонки на первых этапах говорят о высокой вовлеченности клиентов, которые хотят разобраться в деталях перед принятием решения.
- Этап "New Lead" показывает, что первый контакт является ключевым — требуется достаточно времени для убеждения клиента.
3. Этапы с самой короткой средней продолжительностью звонков
- "Lost" (166 сек.) → короткие разговоры с отказавшимися клиентами, возможно, отказ фиксируется быстро без детального обсуждения.
- "Need to Call - Sales" (98 сек.) → возможны быстрые проверки интереса клиента, но без долгих бесед.-
- "Need To Call" (56 сек.) → самые краткие звонки — скорее всего, это просто попытки связи или напоминания.
Вывод:
- Короткие звонки на "Lost" могут означать, что после отказа не предпринимаются дополнительные усилия для возврата клиента.
- Очень короткие звонки на "Need To Call" — возможно, только напоминания или технические проверки, без углубленного общения.
Общие тенденции
- Максимальная продолжительность на этапах проверки и оформления сделки ("Test Sent", "Waiting For Payment").
- Длинные звонки на первых этапах ("New Lead", "Need a consultation") → клиенты активно интересуются перед решением.
- Короткие звонки на "Lost" → отказ фиксируется быстро, возможно, стоит анализировать эффективность работы с этими клиентами
3.2 Pаспределение времени закрытия сделок и продолжительность периода от создания до закрытия.¶
Распределение времени закрытия сделок¶
# Convert closing dates to monthly periods
deals["Closing_Month"] = deals["Closing_Date"].dt.to_period("M")
# Group deals by closing month
closing_distribution = deals.groupby("Closing_Month")["Id"].count().reset_index()
# Seaborn bar plot for deal closures per month
plt.figure(figsize=(12, 6))
ax = sns.barplot(x=closing_distribution["Closing_Month"].astype(str),
y=closing_distribution["Id"],
color="lightblue") # Using a single color instead of `palette`
# Add data labels formatted as integers (no decimal places)
for p in ax.patches:
ax.annotate(f"{int(p.get_height())}",
(p.get_x() + p.get_width() / 2, p.get_height()),
ha="center", va="bottom", fontsize=10, color="black")
# Customize plot appearance
plt.xticks(rotation=45)
plt.xlabel("Month of Deal Closure")
plt.ylabel("Number of Closed Deals")
plt.title("Distribution of Closed Deals per Month")
plt.show()
График "Распределение закрытых сделок по месяцам" показывает динамику закрытия сделок с июля 2023 по декабрь 2024
- рост активности в октябре 2023 (1422 сделки), может быть связан с маркетинговыми кампаниями или сезонностью;
- пик в апреле 2024 (2083 сделки) — вероятно, успешный период для продаж или запуск выгодных предложений;
- падение в июне 2024 (973 сделки), может указывать на спад активности или уменьшение новых лидов;
- единичные сделки в сентябре и декабре 2024 (по 1 сделке) — возможно, данные за эти периоды ещё не полностью собраны или были аномалии.
Выводы и рекомендации
- Анализ сезонности: активные периоды (октябрь, февраль, март, апрель) показывают, когда школа закрывает больше всего сделок. Стоит уточнить причины таких всплесков при анализе рекламных кампаний.
- Управление спадами: июнь 2024 показал снижение — возможно, нужна корректировка стратегии или дополнительное привлечение клиентов.
- Дополнительная проверка данных: единичные сделки в сентябре и декабре 2024 могут быть ошибкой или аномалией.
Анализ продолжительности периода от создания до закрытия сделки¶
# Calculate deal duration (days between creation and closure)
deals["Closing_Duration"] = (deals["Closing_Date"] - deals["Created_Time"]).dt.days
# Seaborn histogram for deal duration
plt.figure(figsize=(10, 5))
ax = sns.histplot(deals["Closing_Duration"].dropna(), bins=30, kde=True, color="blue", edgecolor="black")
# Add data labels on histogram bins
for p in ax.patches:
height = p.get_height()
if height > 0: # Only annotate non-zero bins
ax.annotate(f"{int(height)}", (p.get_x() + p.get_width() / 2, height),
ha="center", va="bottom", fontsize=9, color="black")
# Customize plot appearance
plt.xlabel("Days Until Deal Closure")
plt.ylabel("Number of Deals")
plt.title("Deals Distribution of Creation to Closure time")
plt.show()
График распределения длительности сделки (от создания до закрытия), измеренное в днях.
- большая часть сделок закрывается в пределах 50 дней, что указывает на относительно короткий цикл продаж.
- есть сделки, которые закрываются дольше 150 дней, но их число значительно меньше. Это могут быть более дорогостоящие или более сложные сделки связанные с неопределенностью клиента.
- наблюдается пик закрытия сделок в районе 20-40 дней, что может соответствовать стандартному процессу продаж и принятия решений клиентами.
Выводы и рекомендации:
- Оптимизация процессов: если большинство сделок закрывается в первые 50 дней, стоит проверить, какие факторы ускоряют процесс и как их можно усилить.
- Анализ долгих сделок: сделки, требующие более 150 дней, требуют отдельного анализа—что задерживает их закрытие и можно ли сократить этот период?
- Маркетинговые стратегии: если пик закрытий приходится на 20-40 дней, стоит сфокусироваться на усилении взаимодействий именно в этом периоде.
3.3 Общие выводу по проведенному анализу временных рядов сделок и звонков¶
Динамика создания сделок и их связь со звонками¶
Рост числа звонков часто предшествует увеличению сделок, подтверждая их влияние на продажи.
- Максимальные значения: апрель 2024
- Минимальные значения: декабрь 2023
Это может указывать на сезонность или влияние маркетинговых факторов.
Декомпозиция временного ряда показала:
- Умеренную сезонность (амплитуда 7.99), отражающую повторяющиеся колебания.
- Высокий уровень случайных изменений (24.34), свидетельствующий о нестабильности спроса.
Корреляция звонков и сделок¶
- Коэффициент корреляции:
0.57 - Подтверждает умеренную положительную связь, но не гарантирует превращение звонков в сделки.
- Требуется корректировка стратегии общения с клиентами для повышения конверсии.
Время перехода сделок на финальные этапы¶
| Этап | Среднее время (дней) |
|---|---|
| Qualificated | 27 |
| Waiting For Payment | 34 |
| Lost | 37 |
| Payment Done | 40 |
- Быстрее всего достигается квалификация клиентов.
- Финальная оплата занимает самое большое время, возможно из-за административных процессов.
Анализ звонков по этапам сделок¶
- Наибольшее число звонков (61 341) приходится на этап "Lost", что указывает на попытки работы с отказавшимися клиентами.
- Активность на этапе "Registered on Webinar" подтверждает значимость вебинаров как инструмента продаж.
- Средняя продолжительность звонков наиболее высока на этапах тестирования, квалификации и ожидания платежа.
- Длинные разговоры на ранних стадиях ("New Lead") говорят о высокой вовлеченности клиентов.
Распределение закрытых сделок по месяцам¶
- Пики активности: октябрь 2023 и апрель 2024 (вероятно, маркетинговые кампании).
- Спад в июне 2024 требует дополнительных исследований и корректировки стратегии.
Распределение длительности сделок (от создания до закрытия)¶
Анализ показывает, что большая часть сделок закрывается в пределах 50 дней, что указывает на относительно короткий цикл продаж.
- Сделки, требующие более 150 дней, встречаются редко и могут быть более дорогостоящими или сложными.
- Пик закрытия сделок наблюдается в районе 20-40 дней, что соответствует стандартному процессу продаж и принятию решений клиентами.
Выводы и рекомендации¶
- Оптимизировать процессы, выявляя факторы, ускоряющие закрытие сделок в первые 50 дней, и усиливая их.
- Анализировать долгосрочные сделки, чтобы понять, что задерживает их закрытие и как сократить этот период.
- Фокусироваться на маркетинговых стратегиях, поддерживающих активность клиентов в ключевой период 20-40 дней.
- Усилить маркетинг в активные сезоны (октябрь, февраль, март, апрель) для максимизации продаж.
- Пересмотреть работу с отказавшимися клиентами, улучшив тактику их возврата и ускоряя процесс принятия решений.